package com.xinruke.hostels.reservation.user.interfaces.api;

import com.xinruke.hostels.common.po.MhHuiyuanQinshu;
import com.xinruke.hostels.common.vo.ResultVO;
import com.xinruke.hostels.common.vo.query.RowsDataVO;
import com.xinruke.hostels.reservation.user.interfaces.dto.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import javax.validation.Valid;

/**
 * @ClassName LoginApi
 * @CreateDate 2019/6/12
 * @Author FengXinQiang
 * @Version V1.0.0.0
 * @Decription 登录API
 */
@FeignClient(value = "reservation-user-service", fallbackFactory = ReservationUeserFallback.class)
public interface ReservationUserApi {
    @PostMapping("/login/loginValidate")
    ResultVO<LoginReservationValidateResultDTO> loginValidate(@RequestBody LoginReservationValidateDTO loginValidateDTO);

    /**
     * 查询登录用户信息
     *
     * @param loginUserInfoQueryDTO
     * @return
     */
    @PostMapping(value = "loginUserInfo")
    ResultVO<LoginUserInfoQueryResultDTO> getLoginUserInfo(@RequestBody @Valid LoginUserInfoQueryDTO loginUserInfoQueryDTO);

    /**
     * 添加常用联系人
     */
    @PostMapping("/personal/contacts/add")
    ResultVO addContacts(@Valid @RequestBody ContactsAddInfoDto params);

    /**
     * 查看常用联系人
     */
    @PostMapping("/personal/contacts")
    ResultVO<RowsDataVO<ContactsInfo>> contactsList(@Valid @RequestBody ContactsListQueryDTO contactsListQueryDto);

    /**
     * 修改常用联系人手机号
     */
    @PostMapping("/personal/contacts/phone")
    ResultVO updateContacts(@Valid @RequestBody ContactsUpdateDto params);

    /**
     * 修改个人信息
     * 可以修改个人的联系方式、职级待遇、所属大单位。
     */
    @PostMapping("/personal/update")
    ResultVO update(@Valid @RequestBody PersonalUpdateDto params);

    /**
     * 删除常用联系人
     * 1. 判断联系人添加的时间是否超过一年，
     * 1.1超过一年则提示“您确定要删除选中的常用联系人吗？”确定则删除；
     * 1.2如果添加的时间没有超过一年则提示“当前联系人无法删除！”
     */
    @PostMapping("/personal/contacts/del")
    ResultVO delContacts(@Valid @RequestBody ContactsDelDto params);

    @PostMapping(value = "user/info/userDetail")
    ResultVO<UserInfoQueryResultDTO> getUserDetail(@Valid @RequestBody UserDetailQueryDto userInfoQueryDTO);

    @PostMapping("/personal/contacts/getMhHuiyuanQinshu")
    @ApiOperation("查看联系人详情")
    ResultVO<MhHuiyuanQinshu> getMhHuiyuanQinshu(@Valid @RequestBody ContactsDetailQueryDTO queryDTO);

    /**
     * 查询所有的会员信息列表
     *
     * @param memberListQueryDTO
     * @return
     * @Author: ChenXiangpeng
     * @Date: 2019/7/26 16:15
     */
    @PostMapping("/memberInnerAPI/memberList")
    ResultVO<RowsDataVO<MemberDetailQuertResultDTO>> memberList(@Valid @RequestBody MemberListQueryDTO memberListQueryDTO);

    /**
     * 根据ID查询会员信息
     *
     * @param memberDetailQueryByIdDTO
     * @return
     * @Author: ChenXiangpeng
     * @Date: 2019/7/26 16:58
     */
    @PostMapping("/memberInnerAPI/detail")
    ResultVO<MemberDetailQuertResultDTO> detailById(@Valid @RequestBody MemberDetailQueryByIdDTO memberDetailQueryByIdDTO);

    /**
     * 查看常用联系人详情
     */
    @PostMapping("/memberInnerAPI/contacts/detail")
    ResultVO<ContactsDetailResultDto> contactDetailInnerAPI(@Valid @RequestBody ContactsDetailQueryDTO queryDTO);

    /**
     * 查看常用联系人
     */
    @PostMapping("/memberInnerAPI/contacts")
    ResultVO<RowsDataVO<ContactsInfo>> contactsListInnerAPI(@Valid @RequestBody ContactsListQueryDTO contactsListQueryDto);

    @PostMapping("/personal/isBlacklist")
    ResultVO<BlacklistQueryResultDTO> isBlacklist(@Valid @RequestBody BlacklistQueryDTO blacklistQueryDTO);

    /**
     * 新增会员
     * @param params
     * @return
     */
    @PostMapping("/memberInnerAPI/add")
    ResultVO addMember(@Valid @RequestBody MemberAddDTO params);
}
